pandas表合并——按指定列合并两个表里同样名称的行

在处理观测站气象数据时,遇到了需要将两个表的数据整理到一起的问题,两个表的数据结构如下:
观测站点的详细数据
气象观测数据
现在需要将两个表按第一列‘Sta_ID’拼接,将第二个表中‘Sta_ID’值与第一个表相同的行拼接到同一行,效果如下:
在这里插入图片描述
需要的库基本有pandas,xlrd,xlwt这几个,首先使用pandas.read_excel()将数据分别读入pandas。

A = pd.read_excel('E:\\MODIS\\MCD19A2\\AOD_Max.xls', sheet_name='AOD_Max') # 读取 excel
B = pd.read_excel('E:\\MODIS\\MCD19A2\\AOD_Max.xls', sheet_name='Station_Max', index_col=0)

pandas读入表A
pandas读入表B,这里设置了默认索引列

下一步进行合并,使用pandas.concat()函数实现,关于concat()函数具体的解释可以参考:

https://blog.csdn.net/mr_hhh/article/details/79488445

但是这里有个问题,需要设置索引列为‘Sta_ID’这一列,如果默认索引为这一列,由于该列有重复项,在执行concat()函数时会报错
InvalidIndexError: Reindexing only valid with uniquely valued Index objects’
为解决这个问题,将表A读入时采用默认索引,然后用drop_duplicates()函数删掉重复的行。注意:我的数据B表没有重复项要去除,所以读的时候直接默认索引列为‘Sta_ID’了。

X = A.drop_duplicates(subset=['Sta_ID'])

这里我在测试的时候发现,如果把返回值还给A(如A.drop_duplicates(subset=['Sta_ID'])A=A.drop_duplicates(subset=['Sta_ID'])),那A是没有变化的,所以把这个值给了X,就可以实现了。
表X,即A表删除重复行的结果

drop_duplicates()函数参考

https://blog.csdn.net/Disany/article/details/82689948

现在需要把删除重复项的表X的索引列改为‘Sta_ID’列:

X = X.set_index('Sta_ID')

更换索引的X表
最后完成拼接:

merge = pd.concat([X, B], axis=1, join='inner') 

完整程序如下:

import pandas as pd
# 从excel导入表
A = pd.read_excel('E:\\MODIS\\MCD19A2\\AOD_Max.xls', sheet_name='AOD_Max') # 读取 excel
B = pd.read_excel('E:\\MODIS\\MCD19A2\\AOD_Max.xls', sheet_name='Station_Max', index_col=0)
# 去除重复行
X = A.drop_duplicates(subset=['Sta_ID'])
# 更换索引列
X = X.set_index('Sta_ID')
# 按索引列合并
merge = pd.concat([X, B], axis=1, join='inner') 
print(merge)
# pandas表存出
writer = pd.ExcelWriter('E:\\MODIS\\MCD19A2\\AOD_Sta.xls')
merge.to_excel(writer,float_format='%.5f')
writer.save()

合并后的表merge

  • 3
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要将两个DataFrame按合并(即按连接),可以使用pandas中的concat()函数。下面是使用concat()函数按合并两个DataFrame的示例代码: ``` python import pandas as pd # 创建两个DataFrame df1 = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]}) df2 = pd.DataFrame({'A': [7, 8, 9], 'B': [10, 11, 12]}) # 将两个DataFrame按合并 result = pd.concat([df1, df2]) print(result) ``` 上述代码中,首先通过pd.DataFrame()函数创建了两个DataFrame,然后使用pd.concat()函数将这两个DataFrame按合并,并将结果存储在result变量中。最后,将结果打印出来。 输出结果如下: ``` A B 0 1 4 1 2 5 2 3 6 0 7 10 1 8 11 2 9 12 ``` 在合并后的结果中,索引是连续的整数,这是由于原始DataFrame的索引也是连续的整数。如果要重新设置索引,可以使用reset_index()函数,如下所示: ``` python result = pd.concat([df1, df2]).reset_index(drop=True) print(result) ``` 在reset_index()函数中,参数drop=True示删除原始的索引,使用默认的连续整数作为新的索引。 输出结果如下: ``` A B 0 1 4 1 2 5 2 3 6 3 7 10 4 8 11 5 9 12 ``` ### 回答2: Pandas是一个强大的数据处理工具,可以用它来合并两个DataFrame,按合并的方法有多种。 一种常见的方法是使用concat函数,可以将两个DataFrame按合并为一个新的DataFrame。具体操作可以按照以下步骤进: 1. 首先,通过import语句导入pandas库,并创建两个合并的DataFrame,假设分别为df1和df2。 2. 使用concat函数,将df2合并到df1的下方,设置参数axis=0示按合并合并后的新DataFrame可以赋值给一个新的变量,比如df3。 3. 最后,可以使用print函数输出合并后的df3,查看结果。 下面是具体的示例代码: ``` import pandas as pd # 创建两个DataFrame df1 = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]}) df2 = pd.DataFrame({'A': [7, 8, 9], 'B': [10, 11, 12]}) # 合并两个DataFrame df3 = pd.concat([df1, df2], axis=0) # 输出合并后的DataFrame print(df3) ``` 上述代码中,df1是一个包含两数据的DataFrame,df2也是一个包含两数据的DataFrame。通过concat函数将两个DataFrame按合并为df3,并且按照顺序保留原来的顺序。 希望以上解答对您有帮助,如有任何疑问,请随时追问。 ### 回答3: Pandas是一个强大的数据分析工具,可以用于处理和操作数据。在Pandas中,可以使用concat()函数将两个DataFrame按合并。 下面是一个用于合并两个DataFrame的示例代码: ```python import pandas as pd # 创建两个DataFrame df1 = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]}) df2 = pd.DataFrame({'A': [7, 8, 9], 'B': [10, 11, 12]}) # 合并两个DataFrame df = pd.concat([df1, df2], axis=0, ignore_index=True) print(df) ``` 在上面的代码中,首先导入pandas库,并创建了两个DataFrame(df1和df2)。然后,使用concat()函数将这两个DataFrame按合并为一个新的DataFrame(df),并将结果存储在df变量中。concat()函数可以指定axis参数为0,示按合并;ignore_index参数为True,示重新索引合并的结果。 最后,使用print()函数打印合并后的DataFrame(df)。 执上述代码,输出结果如下: ``` A B 0 1 4 1 2 5 2 3 6 3 7 10 4 8 11 5 9 12 ``` 可以看到,合并后的DataFrame按照原有的顺序进合并,并且重新索引了结果的号。 以上就是使用Pandas合并两个DataFrame的方法。希望对你有帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值